﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Telerik.WinControls.UI;

namespace OwnZTec.LojaDelivery.UI.WinForms
{
    public partial class FrmDebitoPorCliente : OwnZForm
    {
        List<DebitoCliente> listaPedidos;

        private bool carregado { get; set; }

        public FrmDebitoPorCliente()
        {
            InitializeComponent();
        }

        private void FrmDebitoPorCliente_Load(object sender, EventArgs e)
        {
            carregado = false;
            CarregaCliente();
            cboClientes.DropDownListElement.AutoCompleteSuggest.SuggestMode = SuggestMode.Contains;

            Contexto.MainForm.Cursor = Cursors.Arrow;
            carregado = true;
        }

        private void cboClientes_SelectedIndexChanged(object sender, Telerik.WinControls.UI.Data.PositionChangedEventArgs e)
        {
            if (carregado)
                AtualizaGrid(cboClientes.SelectedValue.ParaInt());
        }

        private void AtualizaGrid()
        {
            Cursor = Cursors.WaitCursor;

            listaPedidos = new List<DebitoCliente>();
            DebitoCliente listaItem = new DebitoCliente();
            
            foreach (var item in Contexto.Db.tbVendas.Where(p => p.statusVenda == "E").ToList())
            {
                listaItem = new DebitoCliente();
                listaItem.data = item.dtVenda.ToString("dd/MM/yyyy");
                listaItem.idPedido = item.idVenda;
                listaItem.numPedido = Contexto.Db.tbVendas.First(p => p.idVenda == item.idVenda).numeroVenda.ToString();
                listaItem.idCliente = item.idCliente;
                listaItem.valorTotal = item.valorVenda;
                listaPedidos.Add(listaItem);
            }

            gvPedidos.DataSource = listaPedidos;

            Cursor = Cursors.Arrow;
        }

        private void AtualizaGrid(int idCliente)
        {
            Cursor = Cursors.WaitCursor;

            listaPedidos = new List<DebitoCliente>();
            DebitoCliente listaItem = new DebitoCliente();

            foreach (var item in Contexto.Db.tbVendas.Where(p=>p.idCliente == idCliente).Where(p => p.statusVenda == "E").ToList())
            {
                listaItem = new DebitoCliente();
                listaItem.data = item.dtVenda.ToString("dd/MM/yyyy");
                listaItem.idPedido = item.idVenda;
                listaItem.numPedido = Contexto.Db.tbVendas.First(p => p.idVenda == item.idVenda).numeroVenda.ToString();
                listaItem.idCliente = item.idCliente;
                listaItem.valorTotal = item.valorVenda;
                listaPedidos.Add(listaItem);
            }

            gvPedidos.DataSource = listaPedidos;

            Cursor = Cursors.Arrow;
        }

        private void CarregaCliente()
        {
            cboClientes.DataSource = Contexto.Db.tbClientes.ToList();
            cboClientes.DisplayMember = "desCliente";
            cboClientes.ValueMember = "idCliente";
            cboClientes.SelectedIndex = -1;
        }

        private void rbData_CheckedChanged(object sender, EventArgs e)
        {
            if (rbData.Checked)
                grpData.Visible = true;
        }

        private void rbTodos_CheckedChanged(object sender, EventArgs e)
        {
            if (rbTodos.Checked)
                grpData.Visible = false;
        }

        private void btnImprimir_Click(object sender, EventArgs e)
        {
            //verificar se todos estão marcados
            List<DebitoCliente> lista = (List<DebitoCliente>)gvPedidos.DataSource;
            int contador = 0;
            DateTime menorData = DateTime.Now;
            foreach (DebitoCliente item in lista)
            {
                if (Convert.ToDateTime(item.data) < menorData)
                    menorData = Convert.ToDateTime(item.data);
                if (item.marcar)
                    contador++;
            }

            if (contador == 0)
            {
                MessageBox.Show("Nenhum item foi marcado.", "Débitos", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            if (contador == 0)
            {
                MessageBox.Show("Nenhum item foi marcado.", "Débitos", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            //verificar se todos estão marcados
            StringBuilder sb = new StringBuilder();
            sb.AppendLine("              Salgados Celia              ");
            sb.AppendLine("==========================================");
            sb.AppendLine("     Relatorio de Debitos por Cliente     ");
            sb.AppendLine("==========================================");
            sb.AppendLine("Cliente: " + cboClientes.Text);
            sb.AppendLine("==========================================");

            if (rbData.Checked)
                sb.AppendLine("Periodo: de " + dtpInicial.Value.ToShortDateString() + " a " + dtpFinal.Value.ToShortDateString());
            else
                sb.AppendLine("Periodo: de " + menorData.ToShortDateString() + " a " + DateTime.Now.ToShortDateString());
            sb.AppendLine("==========================================");
            sb.AppendLine("");
            sb.AppendLine("  Data                   Comanda        Valor    ");
            sb = MontarRelatorio(lista, sb);

            //enviar para impressora
            Impressao.Impressao imprime = new Impressao.Impressao();
            imprime.ImprimeDesperdicio(sb);

            //fechar janela
            this.Close();
        }

        private void btnVisualizar_Click(object sender, EventArgs e)
        {
            List<DebitoCliente> lista = (List<DebitoCliente>)gvPedidos.DataSource;
            int contador = 0;
            DateTime menorData = DateTime.Now;
            foreach (DebitoCliente item in lista)
            {
                if (Convert.ToDateTime(item.data) < menorData)
                    menorData = Convert.ToDateTime(item.data);
                if(item.marcar)
                    contador++;
            }

            if(contador == 0)
            {
                MessageBox.Show("Nenhum item foi marcado.", "Débitos", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            //verificar se todos estão marcados
            StringBuilder sb = new StringBuilder();
            sb.AppendLine("              Salgados Celia              ");
            sb.AppendLine("==========================================");
            sb.AppendLine("     Relatorio de Debitos por Cliente     ");
            sb.AppendLine("==========================================");
            sb.AppendLine("Cliente: " + cboClientes.Text);
            sb.AppendLine("==========================================");
            
            if(rbData.Checked)
            sb.AppendLine("Periodo: de " + dtpInicial.Value.ToShortDateString() + " a " + dtpFinal.Value.ToShortDateString());
            else
                sb.AppendLine("Periodo: de " + menorData.ToShortDateString() + " a " + DateTime.Now.ToShortDateString());
            sb.AppendLine("==========================================");
            sb.AppendLine("");
            sb.AppendLine("  Data                   Comanda        Valor    ");
            sb = MontarRelatorio(lista, sb);

            sb.AppendLine("================== FIM ==================");
            //Inserindo espaços para cortar
            for (int i = 0; i <= 7; i++)
            {
                sb.AppendLine("");
            }

            //Mostrar tela
            var frm = new FrmMostraTela
            {
                Pai = this
            };
            frm.sbImprime = sb;
            frm.ShowDialog();

        }

        private StringBuilder MontarRelatorio(List<DebitoCliente> lista, StringBuilder sb)
        {
            foreach (DebitoCliente item in lista)
            {
                if (item.marcar)
                {
                    sb.AppendLine("  " + item.data + "          " + item.numPedido + "              " + item.valorTotal.ToString("C2"));
                }
            }
            return sb;
        }
    }

    public class DebitoCliente
    {
        public bool marcar { get; set; }
        public string data { get; set; }
        public string numPedido { get; set; }
        public decimal valorTotal { get; set; }
        public int idPedido { get; set; }
        public int idCliente { get; set; }
    }
}
